﻿using System;
using Dexter.Logger.Contracts;

namespace Dexter.Logger.Concretes {
	/// <summary>
	/// 	Fake logger implementation of <c>ILogger</c>
	/// </summary>
	public class NullLogger : ILogger {
		/// <summary>
		/// 	Singleton of NullLogger
		/// </summary>
		public static NullLogger Instance = new NullLogger ( );

		NullLogger ( ) {}

		#region ILogger Members

		/// <summary>
		/// 	Gets a value indicating whether this instance is debug enabled.
		/// </summary>
		/// <value>
		/// 	<c>true</c> if this instance is debug enabled; otherwise, <c>false</c>.
		/// </value>
		public bool IsDebugEnabled {
			get { return false; }
		}

		/// <summary>
		/// 	Gets a value indicating whether this instance is error enabled.
		/// </summary>
		/// <value>
		/// 	<c>true</c> if this instance is error enabled; otherwise, <c>false</c>.
		/// </value>
		public bool IsErrorEnabled {
			get { return false; }
		}

		/// <summary>
		/// 	Gets a value indicating whether this instance is fatal enabled.
		/// </summary>
		/// <value>
		/// 	<c>true</c> if this instance is fatal enabled; otherwise, <c>false</c>.
		/// </value>
		public bool IsFatalEnabled {
			get { return false; }
		}

		/// <summary>
		/// 	Gets a value indicating whether this instance is info enabled.
		/// </summary>
		/// <value>
		/// 	<c>true</c> if this instance is info enabled; otherwise, <c>false</c>.
		/// </value>
		public bool IsInfoEnabled {
			get { return false; }
		}

		/// <summary>
		/// 	Gets a value indicating whether this instance is warn enabled.
		/// </summary>
		/// <value>
		/// 	<c>true</c> if this instance is warn enabled; otherwise, <c>false</c>.
		/// </value>
		public bool IsWarnEnabled {
			get { return false; }
		}

		/// <summary>
		/// 	Debugs the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		public void Debug ( string message ) {}

		/// <summary>
		/// 	Debugs the specified format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void Debug ( string format , params object[] args ) {}

		/// <summary>
		/// 	Debugs the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		/// <param name = "exception">The exception.</param>
		public void Debug ( string message , Exception exception ) {}

		/// <summary>
		/// 	Debugs the format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void DebugFormat ( string format , params object[] args ) {}

		/// <summary>
		/// 	Debugs the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void DebugFormat ( Exception exception , string format , params object[] args ) {}

		/// <summary>
		/// 	Debugs the format.
		/// </summary>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void DebugFormat ( IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Debugs the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void DebugFormat ( Exception exception , IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Errors the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		public void Error ( string message ) {}

		/// <summary>
		/// 	Errors the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		/// <param name = "exception">The exception.</param>
		public void Error ( string message , Exception exception ) {}

		/// <summary>
		/// 	Errors the specified format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void Error ( string format , params object[] args ) {}

		/// <summary>
		/// 	Errors the format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void ErrorFormat ( string format , params object[] args ) {}

		/// <summary>
		/// 	Errors the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void ErrorFormat ( Exception exception , string format , params object[] args ) {}

		/// <summary>
		/// 	Errors the format.
		/// </summary>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void ErrorFormat ( IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Errors the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void ErrorFormat ( Exception exception , IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Fatals the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		public void Fatal ( string message ) {}

		/// <summary>
		/// 	Fatals the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		/// <param name = "exception">The exception.</param>
		public void Fatal ( string message , Exception exception ) {}

		/// <summary>
		/// 	Fatals the specified format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void Fatal ( string format , params object[] args ) {}

		/// <summary>
		/// 	Fatals the format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void FatalFormat ( string format , params object[] args ) {}

		/// <summary>
		/// 	Fatals the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void FatalFormat ( Exception exception , string format , params object[] args ) {}

		/// <summary>
		/// 	Fatals the format.
		/// </summary>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void FatalFormat ( IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Fatals the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void FatalFormat ( Exception exception , IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Infoes the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		public void Info ( string message ) {}

		/// <summary>
		/// 	Infoes the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		/// <param name = "exception">The exception.</param>
		public void Info ( string message , Exception exception ) {}

		/// <summary>
		/// 	Infoes the specified format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void Info ( string format , params object[] args ) {}

		/// <summary>
		/// 	Infoes the format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void InfoFormat ( string format , params object[] args ) {}

		/// <summary>
		/// 	Infoes the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void InfoFormat ( Exception exception , string format , params object[] args ) {}

		/// <summary>
		/// 	Infoes the format.
		/// </summary>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void InfoFormat ( IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Infoes the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void InfoFormat ( Exception exception , IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Warns the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		public void Warn ( string message ) {}

		/// <summary>
		/// 	Warns the specified message.
		/// </summary>
		/// <param name = "message">The message.</param>
		/// <param name = "exception">The exception.</param>
		public void Warn ( string message , Exception exception ) {}

		/// <summary>
		/// 	Warns the specified format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void Warn ( string format , params object[] args ) {}

		/// <summary>
		/// 	Warns the format.
		/// </summary>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void WarnFormat ( string format , params object[] args ) {}

		/// <summary>
		/// 	Warns the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void WarnFormat ( Exception exception , string format , params object[] args ) {}

		/// <summary>
		/// 	Warns the format.
		/// </summary>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void WarnFormat ( IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Warns the format.
		/// </summary>
		/// <param name = "exception">The exception.</param>
		/// <param name = "formatProvider">The format provider.</param>
		/// <param name = "format">The format.</param>
		/// <param name = "args">The args.</param>
		public void WarnFormat ( Exception exception , IFormatProvider formatProvider , string format , params object[] args ) {}

		/// <summary>
		/// 	Gets the global properties.
		/// </summary>
		/// <value>The global properties.</value>
		public IContextProperties GlobalProperties {
			get { return null; }
		}

		/// <summary>
		/// 	Gets the thread properties.
		/// </summary>
		/// <value>The thread properties.</value>
		public IContextProperties ThreadProperties {
			get { return null; }
		}

		/// <summary>
		/// 	Gets the thread stacks.
		/// </summary>
		/// <value>The thread stacks.</value>
		public IContextStacks ThreadStacks {
			get { return null; }
		}

		#endregion
	}
}